/*
 * 文 件 名:  RandomDigitUtil.java
 * 版    权:   深圳埃思欧纳信息咨询有限公司版权所有. YYYY-YYYY,  All rights reserved
 * 描    述:   <描述>
 * 修 改 人:  honny.huang
 * 修改时间: 2011-4-2
 * 跟踪单号:  <跟踪单号>
 * 修改单号:  <修改单号>
 * 修改内容:  <修改内容>
 */
package com.common.utils;

import java.util.Random;
import java.util.UUID;

import com.ue.security.MD5;

/**
 * <一句话功能简述> <功能详细描述>
 *
 * @author honny.huang
 * @version [版本号, 2011-4-2]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */

public class RandomDigitUtil 
{
	/**
     * 生成4位验证码
     * <功能详细描述>
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static String genValidateCode()
    {
        Double d = Math.random() * 100000;
        String num = d.toString().substring(0, 4).replace(".", "8");
        return num;
    }
    
    /**
     * <UUID随机生成字符串>
     * <功能详细描述>
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static String getUUIDRandomCodeStr()
    {
    	return UUID.randomUUID().toString();
    }
    
    /***
     * 生成获取邀请码
     * < 十六位数字组成的全局唯一标识符
	 *	    由以下几部分的组合：当前日期和时间(UUID的第一个部分与时间有关，如果你在生成一个UUID之后，
	 *	    过几秒又生成一个UUID，则第一个部分不同，其余相同)，时钟序列，全局唯一的IEEE机器识别号
	 *   （如果有网卡，从网卡获得，没有网卡以其他方式获得）
	 * >
     * @return [参数说明]
     * 
     * @return String [返回类型说明]
     * @exception throws [违例类型] [违例说明]
     * @see [类、类#方法、类#成员]
     */
    public static String[] generateInviteCode(int count)
    {
        String [] inviteCodes = new String[count];
        for(int i = 0;i < count; i++)
        {
            String randomStr = Integer.toHexString(new Random().nextInt()) + Integer.toHexString(new Random().nextInt()) + Integer.toHexString(new Random().nextInt()); 
            String inviteCode = MD5.encode(randomStr);
            inviteCode = inviteCode.substring(0,4) + inviteCode.substring(inviteCode.length() - 4,inviteCode.length());
            inviteCodes[i] = inviteCode;
        }
        return inviteCodes;
    }

    /**
     * 生成随机密码
     */
    public static String getRadomPassword()
    {
        StringBuffer generateRandStr = new StringBuffer();
        java.util.Random rand = new java.util.Random();
        int length = 8;
        char ch;
        for (int i = 0; i < length; i++)
        {
            int digital = rand.nextInt();
            int randNum = Math.abs(digital==Integer.MIN_VALUE?rand.nextInt():digital) % 26 + 97; // 产生97到122的随机数(a-
                                                              // z的键位值)
            ch = (char) randNum;
            generateRandStr.append(ch);
        }
        return generateRandStr.toString();
    }

    /**
     * 随机生成整数
     * */
    public static int getRadomInt()
    {
        java.util.Random rand = new java.util.Random();
        int digital = rand.nextInt();
        int randNum = Math.abs(digital==Integer.MIN_VALUE?rand.nextInt():digital);
        return randNum;
    }
 
	 //调试
	 @SuppressWarnings("static-access")
	 public static void main(String args[])
	 {
		 RandomDigitUtil testUtil = new RandomDigitUtil();
		 // 验证码测试
		 for(int i=0;i<10;i++) 
	     {
			 String num = testUtil.genValidateCode();
	        System.out.println(num);
	     }
		 
		 // 邀请码测试
	     String test[] = testUtil.generateInviteCode(5);
	     StringBuffer buffer = new StringBuffer();
	     for(int i=0;i<test.length;i++)
	     {
	    	 String inviteCode = test[i];
	    	 buffer.append(inviteCode+",");
	     }
	     System.out.print(buffer.toString());
	     
	     // UUID测试
	     System.out.print(getUUIDRandomCodeStr());
	     
	     
	     // 随机密码测试
	     String passwordString = testUtil.getRadomPassword();
	     System.out.println(passwordString);
	     
	     // 随机整数测试
	     int randNum = testUtil.getRadomInt();
	     System.out.println(randNum);
	 }

}
